import Vue from 'vue';
import App from './App.vue';
import router from './router';
import store from './store';
import axios from 'axios';
import VueAxios from 'vue-axios';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import TENCENT from "./assets/js/config";
import "./assets/css/index.css";
import "./assets/css/iconfont.css";
//图表
import ECharts from "vue-echarts";
import "echarts/lib/chart/line";
import "echarts/lib/chart/pie";
import "echarts/lib/chart/bar";
import "echarts/lib/component/tooltip";
import "echarts/lib/component/legend";
import "echarts/lib/component/title";
//时间格式
import moment from "moment";
//进度条
import NProgress from "nprogress";
import "nprogress/nprogress.css";
//自定义菜单加载
import { generaMenu } from "./assets/js/menu";
//md 编译器
import mavonEditor from "mavon-editor";
import "mavon-editor/dist/css/index.css";

Vue.use(VueAxios, axios);
Vue.use(ElementUI);
Vue.use(mavonEditor);
Vue.component("v-chart", ECharts);

Vue.prototype.config = TENCENT;
Vue.prototype.moment = moment;
Vue.config.productionTip = false;

Vue.filter("date", function(value, formatStr = "YYYY-MM-DD") {
  return moment(value).format(formatStr);
});

Vue.filter("dateTime", function(value, formatStr = "YYYY-MM-DD hh:mm:ss") {
  return moment(value).format(formatStr);
});

NProgress.configure({
  easing: "ease", // 动画方式
  speed: 500, // 递增进度条的速度
  showSpinner: false, // 是否显示加载ico
  trickleSpeed: 200, // 自动递增间隔
  minimum: 0.3 // 初始化时的最小百分比
});

router.beforeEach((to, from, next) => {
  NProgress.start();
  if (to.path === "/login") {
    next();
  } else if (!store.state.userId) {
    next({ path: "/login" });
  } else {
    next();
  }
});

router.afterEach(() => {
  NProgress.done();
});

// 响应拦截器
axios.interceptors.response.use(
    function(response) {
      switch (response.data.code) {
        case 401:
          Vue.prototype.$message({
            type: "error",
            message: response.data.message
          });
          router.push({ path: "/login" });
          break;
        case 500:
          Vue.prototype.$message({
            type: "error",
            message: response.data.message
          });
          break;
      }
      return response;
    },
    function(error) {
      return Promise.reject(error);
    }
);

new Vue({
  router,
  store,
  render: h => h(App),
  created() {
    //刷新页面查询用户菜单
    if (store.state.userId != null) {
      generaMenu();
    }
  }
}).$mount('#app')
